package com.example;

import com.example.service.MyService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class A10Application {

    private static final Logger log = LoggerFactory.getLogger(A10Application.class);

    /*
        注意几点:
            1. 版本选择了 java 8，因为目前的 aspectj-maven-plugin 1.14.0 最高只支持到java 16
            2. 运行时需要在VM options 里加入 -javaagent:D:/Dev/Maven/repository/org/aspectj/aspectjweaver/1.9.7/aspectjweaver-1.9.7.jar
                把其中 D:\Dev\Maven\repository 改为自己的 maven 仓库起始地址
     */

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(A10Application.class, args);
        MyService service = context.getBean(MyService.class);

        // ⬇️MyService 并非代理, 但 foo 方法也被增强了, 做增强的 java agent, 在加载类时, 修改了 class 字节码
        log.debug("service class: {}", service.getClass());
        service.foo();

//        context.close();
    }

    /*
        小结:
            1. AOP 的原理并非代理一种，Agent 也能，只要字节码变了，行为就变了
     */
}
